// 导入express创建路由
const router = require('express').Router();
const path = require('path');
const fs = require('fs');
const upload = require('../../common/upload');//定义处理图片的模块 （文件名称，文件路径）
const upload_article = require('../../common/upload_article');//定义处理图片的模块 （文件名称，文件路径）
const host = require('../host');
const Jwt = require('../../common/token/jwt');

// 上传图片思路：
// 1. 导入处理文件的包
// 2. 编写上传图片的函数 通过URL可以执行该函数
// 3. 执行该函数可以把图片储存在指定的目录中，会得到一个图片路径
// 4. 这个图片路径可以储存在数据库

// 上传图片 (富文本框组件)
// URL: /api/photo/upload
// 参数： photo
router.post('/upload', upload.single('photo'), async (req, res) => {
    // 接收前端的文件(图片)
    let file = req.file;
    // console.log({file})
    let alt = req.body.alt || '默认说明'
    let href = req.body.href || '默认链接'
    if (file == undefined) { res.send({ code: -1, msg: '上传图片失败。' }) }
    else {
        // 定义图片路径 
        // http://127.0.0.1:3000/images/1.jpg
        let picUrl = `${host.url}/upload/images/${file.filename}`;
        // 反馈图片上传信息
        let info = {
            // errno 即错误代码， 0表示没有错误。
            // 如果有错误，errno != 0，可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
            "errno": 0,
            // data 是一个数组，返回图片Object，Object中包含需要包含url、alt和href三个属性,它们分别代表图片地址、图片文字说明和跳转链接,alt和href属性是可选的，可以不设置或设置为空字符串,需要注意的是url是一定要填的。
            "data": [
                {
                    url: picUrl,
                    alt,
                    href
                },
            ]
        }
        // 按照富文本框组件的要求 设置响应数据的格式
        res.send(info)
    }
})

// 上传图片 (头像/封面图片)
// URL: /api/photo/preview
// 参数： photo
router.post('/preview', upload.single('photo'), async (req, res) => {
    let file = req.file;
    if (file == undefined) { res.send({ code: -1, msg: '上传图片失败。' }) }
    else {
        // 定义图片路径 
        // http://127.0.0.1:3000/images/1.jpg
        let picUrl = `${host.url}/upload/images/${file.filename}`;
        // 反馈图片上传信息
        if (picUrl) {
            let id = Math.random().toString().slice(2);
            res.send({ code: 200, msg: '上传图片成功。', picUrl, id });
        }
        else {
            res.send({ code: -1, msg: '上传图片失败。'});
        }
    }



    // 使用token判断用户的登录状态
    // let token = req.body.token || req.headers.token;
    // let jwt = new Jwt(token);
    // // 判断token是否在有效期
    // let result = jwt.verifyToken();
    // // 登录状态
    // if(result.code == 200){
    // 接收前端的文件(图片)
    // let file = req.file;
    // if (file == undefined) {res.send({code: -1, msg: '上传图片失败。'})}
    // else {
    //     // 定义图片路径 
    //     // http://127.0.0.1:3000/images/1.jpg
    //     let picUrl = `${host.url}/upload/images/${file.filename}`;
    //     // 反馈图片上传信息
    //     if (picUrl) {
    //         let id = Math.random().toString().slice(2);
    //         res.send({code: 200,msg: '上传图片成功。',picUrl, id});
    //     }
    // }
    // }
    // 登录失效状态
    // else {
    //     res.send({code: -1, msg: '登录已过期,请重新登录。'})
    // }
})

// 删除图片
// URL: /api/photo/remove
// 参数：picUrl (图片的路径) dirName
// 删除图片
router.post('/remove', async (req, res) => {
    // 相对地址 http://
    let picUrl = req.body.picUrl;
    let dirName = req.body.dirName || 'upload';
    // console.log('1.0',picUrl)
    if(picUrl == undefined || picUrl == ''){
        res.send({ code: -1, msg: '缺少参数' })
        return;
    }
    //通过slice方法，分割出图片前面的url地址
    let index = picUrl.indexOf(dirName);
    // 判断该图片路径是否存在
    if (index > -1) {
        // 拼接图片路径 (查找图片)
        let temp_path = path.join(__dirname, '../../public/', picUrl.slice(index));
        console.log('2.0', temp_path);
        // fs.unlink 删除文件
        fs.unlink(temp_path, (err) => {
            // err 如果为null 就删除图片成功 ； 否则删除失败
            if (err) {
                res.send({ code: -1, msg: '删除图片失败。' })
            }
            else {
                //删除图片文件成功
                res.send({ code: 200, msg: '删除图片成功。' })
            }
        })
    }
    else {
        res.send({ code: 404, msg: '该路径找不到图片资源。' })
    }
})



// 上传图片 (富文本框组件)
// URL: /api/photo/upload_article
// 参数： photo
router.post('/upload_article', upload_article.single('photo'), async (req, res) => {
    // 接收前端的文件(图片)
    let file = req.file;
    let alt = req.body.alt || '默认说明'
    let href = req.body.href || '默认链接'
    if (file == undefined) { res.send({ code: -1, msg: '上传图片失败。' }) }
    else {
        // 定义图片路径 
        // http://127.0.0.1:3000/images/1.jpg
        let picUrl = `${host.url}/article/images/${file.filename}`;
        // 反馈图片上传信息
        let info = {
            // errno 即错误代码， 0表示没有错误。
            // 如果有错误，errno != 0，可通过下文中的监听函数 fail 拿到该错误码进行自定义处理
            "errno": 0,
            // data 是一个数组，返回图片Object，Object中包含需要包含url、alt和href三个属性,它们分别代表图片地址、图片文字说明和跳转链接,alt和href属性是可选的，可以不设置或设置为空字符串,需要注意的是url是一定要填的。
            "data": [
                {
                    url: picUrl,
                    alt,
                    href
                },
            ]
        }
        // 按照富文本框组件的要求 设置响应数据的格式
        res.send(info)
    }
})

// 上传图片 (头像/封面图片)
// URL: /api/photo/preview_article
// 参数： photo
router.post('/preview_article', upload_article.single('photo'), async (req, res) => {
    let file = req.file;
    // console.log({file})
    if (file == undefined) { res.send({ code: -1, msg: '上传图片失败。' }) }
    else {
        // 定义图片路径 
        // http://127.0.0.1:3000/images/1.jpg
        let picUrl = `${host.url}/article/images/${file.filename}`;
        // 反馈图片上传信息
        if (picUrl) {
            let id = Math.random().toString().slice(2);
            res.send({ code: 200, msg: '上传图片成功。', picUrl, id });
        }
        else {
            res.send({ code: -1, msg: '上传图片失败。'});
        }
    }
})

// 删除图片
// URL: /api/photo/remove_article
// 参数：picUrl (图片的路径)
// 删除图片
router.post('/remove_article', async (req, res) => {
    // 相对地址 http://
    let picUrl = req.body.picUrl;
    console.log('1.0',picUrl)
    if(picUrl == undefined || picUrl == ''){
        res.send({ code: -1, msg: '缺少参数' })
        return;
    }
    //通过slice方法，分割出图片前面的url地址
    let index = picUrl.indexOf('article');
    // 判断该图片路径是否存在
    if (index > -1) {
        // 拼接图片路径 (查找图片)
        let temp_path = path.join(__dirname, '../../public/', picUrl.slice(index));
        console.log('2.0', temp_path);
        // fs.unlink 删除文件
        fs.unlink(temp_path, (err) => {
            // err 如果为null 就删除图片成功 ； 否则删除失败
            if (err) {
                res.send({ code: -1, msg: '删除图片失败。' })
            }
            else {
                //删除图片文件成功
                res.send({ code: 200, msg: '删除图片成功。' })
            }
        })
    }
    else {
        res.send({ code: 404, msg: '该路径找不到图片资源。' })
    }
})



// 上传图片 (多个图片,例如: 发布朋友圈那种效果)
// URL: /api/photo/dgtp
// 参数： photo
router.post('/dgtp', upload.array('photo'), async (req, res) => {
    let files = req.files;
    if(files) {
        let result = [];
        files.forEach(file=>{
            // 定义图片路径 
            // http://127.0.0.1:3000/images/1.jpg
            let src = `${host.url}/upload/images/${file.filename}`;
            let id = Math.random().toString().slice(2);
            let obj = {id , src}
            result.push(obj)
        })
        res.send({
            code: 200,
            result 
        })
    }
    else {
         res.send({
            code: -1,
            msg: '上传多个图片失败.'
         })
    }

})


// 暴露路由
module.exports = router;